home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / Smart.h < prev    next >
C/C++ Source or Header  |  1992-04-27  |  1KB  |  43 lines

  1. #ifndef Smart_First
  2. #define Smart_First
  3.  
  4. #include "Types.h"
  5.  
  6.  
  7. #define SmartDef(name)          \
  8. class name2(name, Ptr) {        \
  9.     int died;                   \
  10.     class name *g;              \
  11.     name *make();               \
  12. public:                         \
  13.     name2(name, Ptr)()          \
  14.     { g= 0; died= 0; }      \
  15.     ~name2(name, Ptr)();        \
  16.     name *operator -> ()        \
  17.     { return make(); }      \
  18.     operator name* ()           \
  19.     { return make(); }      \
  20. };                              \
  21. extern name2(name, Ptr)
  22.  
  23. #define _SmartImpl(name,expr)           \
  24. name2(name, Ptr)::~name2(name, Ptr)     \
  25. {                                       \
  26.     if (g) delete g; died= 1;           \
  27. }                                       \
  28. name *name2(name, Ptr)::make()          \
  29. {                                       \
  30.     if (g)                              \
  31.     return g;                       \
  32.     if (died) {                         \
  33.     fprintf(stderr, "error\n");     \
  34.     return 0;                       \
  35.     }                                   \
  36.     return g= expr;                     \
  37. }                                       \
  38. name2(name, Ptr)                        
  39.  
  40. #define SmartImpl(name) _SmartImpl(name,new name)
  41.  
  42. #endif
  43.